/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GuiDadosUsuario.java
 *
 * Created on 26/11/2011, 10:53:09
 */
package view.gui;

import controller.ControllerPerfil;
import controller.ControllerUsuario;
import java.util.List;
import javax.swing.JOptionPane;
import model.dominio.PerfilUsuario;
import model.dominio.Usuario;

/**
 *
 * @author danielgr
 * Classe responsável para tratamento de dados dos Usuários do Sistema.
 * Este tratamento de dados consiste no Cadastro ou na Edição.
 */
public class GuiDadosUsuario  extends JInternalFramePermissao {

   private Usuario usuario;

   /** Creates new form GuiDadosUsuario */
   /**
    * Construtor da interface gráfica para Cadastro de novo Usuário.
    * Inicialisa uma lista com possíveis perfis para seleção.
    */
   public GuiDadosUsuario() {
      initComponents();
      inicializaListaPerfil();
      usuario = new Usuario();
   }

   /**
    * Construtor da interface gráfica para Edição de Usuário previamente Cadastrado.
    * Além de inicializar Lista de Perfis, permite a edição de outros dados de um Usuário.
    * @param u 
    * Objeto da classe Usuário, criado na busca por um Usuário no banco de dados.
    */
   public GuiDadosUsuario(Usuario u) {
      initComponents();
      inicializaListaPerfil();
      boxNome.setText(u.getNome());
      boxCpf.setText(u.getCpf());
      boxLogin.setText(u.getLogin());
      comboPerfisUsuario.setSelectedItem(u.getPerfil());
      jButton1.setText("Editar");
      usuario = u;
   }
   
   /**
    * Método resṕonsável por inicializar a Lista de Perfis existentes no banco de dados.
    * Exibe Lista criada pelo Administrador.
    */
   public void inicializaListaPerfil() {
      List<PerfilUsuario> lista = ControllerPerfil.buscaPerfisUsuario();
      
      PerfilUsuario p = new PerfilUsuario();
      comboPerfisUsuario.addItem("Selecione o Perfil");
      for (PerfilUsuario perfil : lista) {
	comboPerfisUsuario.addItem(perfil);
      }
   }

   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
   @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        boxNome = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        boxLogin = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        comboPerfisUsuario = new javax.swing.JComboBox();
        jLabel5 = new javax.swing.JLabel();
        password = new javax.swing.JPasswordField();
        confirmarPassword = new javax.swing.JPasswordField();
        jLabel6 = new javax.swing.JLabel();
        boxCpf = new javax.swing.JFormattedTextField();
        jButton1 = new javax.swing.JButton();
        Cancelar = new javax.swing.JButton();

        setClosable(true);
        setTitle("Cadastrar Usuário");
        getContentPane().setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Dados Usuário"));
        jPanel1.setLayout(null);

        jLabel1.setText("Nome:");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(20, 20, 130, 30);
        jPanel1.add(boxNome);
        boxNome.setBounds(150, 20, 270, 30);

        jLabel2.setText("Login:");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(20, 100, 130, 30);
        jPanel1.add(boxLogin);
        boxLogin.setBounds(150, 100, 270, 30);

        jLabel3.setText("Senha:");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(20, 140, 190, 30);

        jLabel4.setText("Perfil:");
        jPanel1.add(jLabel4);
        jLabel4.setBounds(20, 220, 130, 30);

        jPanel1.add(comboPerfisUsuario);
        comboPerfisUsuario.setBounds(150, 220, 270, 30);

        jLabel5.setText("Confirmar Senha:");
        jPanel1.add(jLabel5);
        jLabel5.setBounds(20, 180, 190, 30);
        jPanel1.add(password);
        password.setBounds(210, 140, 210, 30);
        jPanel1.add(confirmarPassword);
        confirmarPassword.setBounds(210, 180, 210, 30);

        jLabel6.setText("CPF:");
        jPanel1.add(jLabel6);
        jLabel6.setBounds(20, 60, 130, 30);

        try {
            boxCpf.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        jPanel1.add(boxCpf);
        boxCpf.setBounds(150, 60, 270, 30);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(0, 0, 430, 270);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/salvar.png"))); // NOI18N
        jButton1.setText("Cadastrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(60, 290, 140, 60);

        Cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/cancelar.png"))); // NOI18N
        Cancelar.setText("Cancelar");
        Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CancelarActionPerformed(evt);
            }
        });
        getContentPane().add(Cancelar);
        Cancelar.setBounds(220, 290, 150, 60);

        setBounds(0, 0, 440, 397);
    }// </editor-fold>//GEN-END:initComponents

   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
      JOptionPane pane = new JOptionPane();
      if (boxNome.getText().isEmpty() || boxLogin.getText().isEmpty() || boxCpf.getText().length() != 14 || String.valueOf(password).isEmpty() || String.valueOf(confirmarPassword).isEmpty() || comboPerfisUsuario.getSelectedIndex() == 0) {
	String campoErro = "" + (boxNome.getText().isEmpty() ? "nome " : "");
	JOptionPane.showMessageDialog(null, "Campo " + campoErro + "é obrigatório, mas não foi preenchido!", "ERRO", JOptionPane.ERROR_MESSAGE);
	return;
      }

      usuario.setNome(boxNome.getText());
      usuario.setCpf(boxCpf.getText());
      usuario.setLogin(boxLogin.getText());
      if (String.valueOf(password.getPassword()).equals(String.valueOf(confirmarPassword.getPassword()))) {
	usuario.setSenha(String.valueOf(password.getPassword()));
      } else {
	String campoErro = "Senha e Confirmação devem ser iguais.";
	JOptionPane.showMessageDialog(null, campoErro, "ERRO", JOptionPane.ERROR_MESSAGE);
	return;
      }
      usuario.setPerfil((PerfilUsuario) comboPerfisUsuario.getSelectedItem());
      if (ControllerUsuario.salvarUsuario(usuario)) {
	JOptionPane.showMessageDialog(null, "Dados registrados com sucesso!", "Login Usuário", JOptionPane.INFORMATION_MESSAGE);
	this.dispose();
      } else {
	JOptionPane.showMessageDialog(null, "Falha ao registrar os dados.", "Login Usuário", JOptionPane.ERROR_MESSAGE);
      }
   }//GEN-LAST:event_jButton1ActionPerformed

   private void CancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelarActionPerformed

      this.dispose();    }//GEN-LAST:event_CancelarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Cancelar;
    private javax.swing.JFormattedTextField boxCpf;
    private javax.swing.JTextField boxLogin;
    private javax.swing.JTextField boxNome;
    private javax.swing.JComboBox comboPerfisUsuario;
    private javax.swing.JPasswordField confirmarPassword;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPasswordField password;
    // End of variables declaration//GEN-END:variables

    @Override
    public int getPermissao() {
        if(usuario.getCodigo()!=null && usuario.getCodigo()>0){
            return 4;
        }else{
            return 3;
        }
    }
}
